/**
 dom4j是一个非常非常优秀的Java XML API，具有性能优异，功能强大和极端易用使用的特点，同时
 它也是一个开放源代码的软件，可以在SourceForge上找到它。在对主流的JAVA XML API进行的性能
 功能和易用性的评测，dom4j无论在那个方面那都是非常出色的。如今你可以看到越来越多的JAVA软件都在
 使用dom4j来读写XML，特别值得一提的是连SU你的jaxm也在用dom4j。这是必须使用的jar包，Hibernate用它
 来配置文件。
 https://dom4j.github.io
 */
package 第十七章_XML与JSON.XML_DOM4J;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.junit.Test;

import java.io.InputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;


public class Dom4J_run {
    @Test
    public void dom4_run() throws DocumentException {
        //1.dom4j 解析器对象
        SAXReader reader=new SAXReader();
        //2.读取文件路径
        InputStream is=Thread.currentThread().getContextClassLoader()
                .getResourceAsStream("第十七章_XML与JSON/XML_DOM4J/People.xml");
        //项目文件对象
        Document doc = reader.read(is);
        //头文件元素对象
        Element rootElement = doc.getRootElement();
        //头文件元素接口对象
        Iterator<org.dom4j.Element> iterator = rootElement.elementIterator();
        //解析文件存放容器对象
        ArrayList<Person> persons = new ArrayList<>();
        //解析格式对象
        Person p=null;
        //
        while(iterator.hasNext()){
            p=new Person();
            //递归生成二级对象
            org.dom4j.Element e = iterator.next();
            p.setPersonid(e.attributeValue("personid"));
            //递归生成三级对象
            Iterator<org.dom4j.Element> iterator1=e.elementIterator();
            while(iterator1.hasNext()){
                org.dom4j.Element next=iterator1.next();
                String tag=next.getName();
                if("name".equals(tag)){
                    p.setName(next.getText());
                }else if("address".equals(tag)){
                    p.setAddress(next.getText());
                }else if("tel".equals(tag)) {
                    p.setTel(next.getText());
                }else if("fax".equals(tag)) {
                    p.setFax(next.getText());
                }else if("email".equals(tag)) {
                    p.setEmail(next.getText());
                }
            }
            //将节点对象放入解析容器
            persons.add(p);
        }
        System.out.println(Arrays.toString(persons.toArray()));
        persons.stream().forEach(System.out::println);
    }
}
